package controlador;

import modelo.*;
import java.sql.*;
import SQL.Conexion;
import java.io.FileInputStream;
import java.util.ArrayList;

/**
 *
 * @author german
 */
public class ControladorLibro {
    
    public int obtenerIdAutor(String au)
    {
        int id = 0;
        
        try
        {
            Connection conexion = Conexion.getConexion();
            String sql = "select id_autor from autor where nombre_autor='"+au+"'";       
            Statement consulta1 = conexion.createStatement();
            ResultSet resultado = consulta1.executeQuery(sql);
            while(resultado.next())
            {
                id = resultado.getInt(1);
            }
        }
        catch(Exception z)
        {
            System.err.print("Error con "+z.getMessage());
        }
        return id;
                
    }
    
    public int obtenerIdIdioma(String au)
    {
        int id = 0;
        
        try
        {
            Connection conexion = Conexion.getConexion();
            String sql = "select id_idioma from idioma where idioma='"+au+"'";       
            Statement consulta1 = conexion.createStatement();
            ResultSet resultado = consulta1.executeQuery(sql);
            while(resultado.next())
            {
                id = resultado.getInt(1);
            }
        }
        catch(Exception z)
        {
            System.err.print("Error con "+z.getMessage());
        }
        return id;
                
    }
    
    public int obtenerIdEditorial(String ed)
    {
        int id = 0;
        try
        {
            Connection conexion = Conexion.getConexion();
            String sql = "select id_editorial from editorial where NOMBRE_EDITORIAL ='"+ed+"'";
            Statement consulta1 = conexion.createStatement();
            ResultSet resultado = consulta1.executeQuery(sql);
            while(resultado.next())
            {
                id = resultado.getInt(1);
            }
        }
        catch(Exception z)
        {
            System.err.print("Error con "+z.getMessage());
        }
        return id;
                
    }
    
    public String insertarEditorial(String ed)
    {
        String nom = ed;
        try
        {
            String sql = 
               "insert into editorial values(seqeditorial.nextval,'"+ed+"')";
            Connection conexion = Conexion.getConexion();
            PreparedStatement consulta = conexion.prepareStatement(sql);
            consulta.execute();
        }
        catch(Exception z)
        {
            System.err.print("Error con "+z.getMessage());
        } 
        return nom;
    }
    
    public String insertarAutor(String au, int idio)
    {
        String nom = au;
        
        try
        {
            String sql = 
               "insert into autor values(seqAutor.nextval,'"+au+"',"+idio+")";
            Connection conexion = Conexion.getConexion();
            PreparedStatement consulta = conexion.prepareStatement(sql);
            consulta.execute();
        }
        catch(Exception z)
        {
            System.err.print("Error con "+z.getMessage());
        }
        
        return nom;
    }
    
    public boolean insertarLibro(Libro lib, Editorial edi, Autor aut,FileInputStream fip)
    {
        boolean validacion = false;
        try
        {
            String sql = 
               "insert into libro values(seqlibro.nextval,"
                    + "?,?,?,?,?,?,?)";
            Connection conexion = Conexion.getConexion();
            PreparedStatement consulta = conexion.prepareStatement(sql);
            consulta.setInt(1, edi.getId());
            consulta.setInt(2, aut.getId());
            consulta.setString(3, lib.getNOMBRE_ARTICULO());
            consulta.setInt(4, lib.getAGNO());
            consulta.setDouble(5, lib.getMONTO_ARTICULO());
            consulta.setInt(6, lib.getNUM_PAGINAS());
            consulta.setBlob(7, fip);
            validacion =consulta.execute();
        }
        catch(Exception z)
        {
            System.err.print("Error con "+z.getMessage());
        }
        return validacion;
    }
    public Libro buscarLibro(int id)
    {
        Libro lib = new Libro();
        try
        {
            String sql ="select libro.id_libro, libro.nombre, libro.agno, libro.precio, libro.num_paginas, "
                    + "editorial.NOMBRE_EDITORIAL, autor.nombre_autor, idioma.id_idioma "
                    + "from libro, autor, editorial, idioma "
                    + "where libro.id_libro="+id+" and libro.id_autor=autor.id_autor and libro.id_editorial=editorial.id_editorial"
                    + " and autor.id_idioma=idioma.id_idioma";
            Connection conexion= Conexion.getConexion();
            Statement select=conexion.createStatement();
            ResultSet rs = select.executeQuery(sql);
            while(rs.next())
                {
                    lib.setID_Libro(rs.getInt(1));
                    lib.setNOMBRE_ARTICULO(rs.getNString(2).trim());
                    lib.setAGNO(rs.getInt(3));
                    lib.setMONTO_ARTICULO(rs.getInt(4));
                    lib.setNUM_PAGINAS(rs.getInt(5));
                    lib.setEDITORIAL(rs.getNString(6).trim());
                    lib.setAUTOR(rs.getNString(7).trim());
                    lib.setidioma(rs.getNString(8).trim());
                }
            
        }
        catch(Exception z)
        {
            System.err.print("Error con "+z.getMessage());
        }
        return lib;
    }
    public void ModificarLibro(Libro lib, Editorial edi, Autor aut,FileInputStream fip)
    {
        try
        {
            String sql = 
               "UPDATE libro set id_editorial = "+edi.getId()+", "
                    + "id_autor = "+aut.getId()+", "
                    + "nombre = '"+lib.getNOMBRE_ARTICULO()+"', "
                    + "agno = "+lib.getAGNO()+", "
                    + "precio = "+lib.getMONTO_ARTICULO()+", "
                    + "num_paginas = "+lib.getNUM_PAGINAS()+", "
                    + "portada = ? ,"
                    + "id_pais = "+lib.getNUM_PAGINAS()+", "
                    + "where "
                    + "id_libro ="+lib.getID_Libro();
            Connection conexion = Conexion.getConexion();
            PreparedStatement consulta = conexion.prepareStatement(sql);
            /*consulta.setInt(1, edi.getId());
            consulta.setInt(2, aut.getId());
            consulta.setNString(3, lib.getNOMBRE_ARTICULO());
            consulta.setInt(4, lib.getAGNO());
            consulta.setDouble(5, lib.getMONTO_ARTICULO());
            consulta.setInt(6, lib.getNUM_PAGINAS());*/
            consulta.setBlob(1, fip);
            consulta.executeUpdate();
        }
        catch(Exception z)
        {
            System.err.print("Error con "+z.getMessage());
        }
    }
    public void ElimiarLibro(int id)
    {
        try
        {
            String sql = "delete from libro where id_libro=?";
            Connection conexion = Conexion.getConexion();
            PreparedStatement consulta = conexion.prepareStatement(sql);
            consulta.setInt(1, id);
            consulta.executeUpdate();            
        }
        catch(Exception z)
        {
            System.err.print("Error con "+z.getMessage());
        }
    }
    public ArrayList<Libro> listarLibros()
            {
                ArrayList<Libro> lista= new ArrayList();
                try
        {
            String sql ="select libro.id_libro, libro.nombre,libro.agno,libro.precio,libro.NUM_PAGINAS,"+
                    " AUTOR.NOMBRE_AUTOR ,EDITORIAL.NOMBRE_EDITORIAL from autor,libro,editorial"
                    + " where AUTOR.ID_AUTOR=LIBRO.ID_AUTOR and EDITORIAL.ID_EDITORIAL=LIBRO.ID_EDITORIAL";
            Connection conexion= Conexion.getConexion();
            Statement select=conexion.createStatement();
            ResultSet rs = select.executeQuery(sql);
            while(rs.next())
                {
                    Libro lib = new Libro();
                    lib.setID_Libro(rs.getInt(1));
                    lib.setNOMBRE_ARTICULO(rs.getNString(2).trim());
                    lib.setAGNO(rs.getInt(3));
                    lib.setMONTO_ARTICULO(rs.getDouble(4));
                    lib.setNUM_PAGINAS(rs.getInt(5));
                    lib.setAUTOR(rs.getNString(6).trim().trim());
                    lib.setEDITORIAL(rs.getNString(7).trim().trim());
                    lista.add(lib);
                }
        }
        catch(Exception z)
        {
            System.err.print("Error con "+z.getMessage());
        }              
                return lista;
            }
    
}
